第 六 章  
特 征 提 取  
汇报人:陈西PPT工作室  
目录  
像特征概述  
域形状特征  
于灰度值的特征  
于图像纹理的特征  
图 像 特 征 概 述  
图像特征提取  
为了使计算机能够理解图像,我们需要从图像中提取有用的数  
据或信息,因此需要确定一个或多个特征量。这些我们确定的特征量  
被称为特征,这一过程就是特征提取。  
图像特征  
ꢀꢀ特征是某一类对象区别于其他类对象的相应(本质)特点或特性,或这些特点  
和特性的集合。  
ꢀꢀ对于图像而言,每一幅图像都具有能够区别于其他类图像的自身特征,有些是  
可以直观地感受到的自然特征,如亮度、边缘、纹理和色彩等,有些则是需要通过  
变换或处理才能得到的,如矩阵、直方图以及主成分等。ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ  
图像特征的分类  
述图像或图像区域所对应的景物的表面性质  
述了图像或图像区域所对应景物的表面性质  
颜色特征  
纹理特征  
形状特征  
类是轮廓特征,主要针对物体的外边界  
一类是区域特征,关系到整个形状区域  
连接/邻接关系、交叠/重叠关系和包含/包容关系等。  
空间关系特征  
特征提取的一般原则  
图像识别实际上是一个分类的过程,为了识别出某图像所属的类别,需要将它与其他不同类别  
的图像区分开来。这就要求选取的特征不仅要能够很好地描述图像,更重要的是还要能够很好地区  
分不同类别的图像。  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ  
ꢀꢀꢀ  
2)选取的特征应对噪  
(3)总是应试图寻找最  
具区分能力的特征  
(1)特征应当容易提取  
声和不相关转换不敏感  
区 域 形 状 特 征  
区域形状特征  
在场景中选择物体的特征是图像测量或者识别的重要基础。在特  
征提取中,区域的形状特征是非常常用的特征,包括区域面积、中心  
点坐标、区域的宽度和高度等特征量  
区域的面积和中心点  
获取区域的面积和中线点特征实例  
程序如下:  
*
*
*
*
获取图像ꢀꢀꢀꢀꢀꢀꢀꢀread_image (Image, 'fabrik')  
关闭窗口ꢀꢀꢀꢀꢀꢀꢀꢀdev_close_window ()  
打开窗口ꢀꢀꢀꢀꢀꢀꢀꢀdev_open_window (0, 0, 512, 512, 'black', WindowID)  
设置输出字体,14号字,Courier字体,粗体ꢀꢀset_display_font (WindowID, 14, 'mono',  
'
true', 'false')  
*
*
*
*
*
设置输出颜色ꢀꢀꢀꢀꢀꢀdev_set_colored (6)  
a)原图  
进行区域生长操作ꢀꢀꢀꢀregiongrowing (Image, Regions, 1, 1, 3, 200)  
显示区域ꢀꢀꢀꢀꢀꢀꢀꢀdev_display (Regions)  
计算所有不相连区域的面积和中心点坐标ꢀꢀarea_center (Regions, Area, Row, Column)  
获取一个字符串的空间大小get_string_extents (WindowID, 12345, Ascent, Descent,  
TxtWidth, TxtHeight)  
将面积计算结果以字符串形式显示在窗口中ꢀdisp_message (WindowID, Area, 'image',  
Row - TxtHeight / 2, Column - TxtWidth / 2, 'white', 'false')  
*
(b)各个区域面积显示图  
封闭区域(孔洞)的面积  
计算封闭区域面积实例  
程序如下:  
*
*
*
*
*
关闭窗口ꢀꢀꢀꢀꢀꢀꢀdev_close_window ()  
读取图像ꢀꢀꢀꢀꢀꢀꢀread_image (Image, 'rings_and_nuts')  
打开适应图像大小的窗口dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)  
设置输出颜色ꢀꢀꢀꢀꢀdev_set_color ('red')  
设置输出字体,14号字,Courier字体,粗体ꢀꢀset_display_font (WindowHandle, 14,  
'
mono', 'true', 'false')  
a)原图  
*
*
*
*
显示图像ꢀꢀꢀꢀꢀꢀꢀdev_display (Image)  
进行阈值操作ꢀꢀꢀꢀꢀthreshold (Image, Region, 128, 255)  
计算区域中孔的面积ꢀꢀarea_holes (Region, Area)  
将面积计算结果以字符串形式显示在窗口中ꢀꢀdisp_message (WindowHandle, 'Size of  
enclosed area (holes): ' + Area + ' pixel', 'window', 12, 12, 'black', 'true')  
(b)孔洞面积计算结果图  
根据特征值选择区域  
关于提取图像的特征,比较常用的一个算子最sclect_shape算子,它能高效地根据特征提取出符  
合条件的区域。  
该算子的原型如下:  
Select_shape(Regions: SelectedRegions: Features, Operation, Min, Max: )  
区域的常用特征  
Features  
代表含义  
area  
输入区域的面积  
row  
输入区域中心点的行坐标  
输入区域中心点的列坐标  
输入区域的宽度  
column  
width  
height  
输入区域的高度  
circularity  
compactness  
convexity  
rectangularity  
outer_radius  
inner_radius  
Inner_width  
Inner_height  
Connect_num  
holes_num  
max_diameter  
输入区域的圆度  
输入区域的紧密度  
输入区域的凸包性  
输入区域的矩形度  
输入区域的最小外接圆的半径  
输入区域的最大内接圆的半径  
输入区域的与坐标轴平行的最大内接矩形的宽度  
输入区域的与坐标轴平行的最大内接矩形的宽度  
输入区域中非连通区域的数量  
输入区域包含的孔洞数量  
输入区域的最大直径  
利用Select_shape选择区域实例  
程序如下:  
*
读取图像ꢀꢀꢀꢀꢀꢀ  
read_image (Image, 'monkey')ꢀꢀꢀꢀꢀꢀ  
threshold (Image, Region, 128, 255)  
*
将非连通区域分割成一组区域的集合  
connection (Region, ConnectedRegions)  
利用面积以及椭圆长轴与短轴的比值特征,将眼睛部分区域提取出来  
select_shape (ConnectedRegions, SelectedRegions,  
'area','anisometry'], 'and', [500,1], [2000,1.7])  
显示结果区域ꢀꢀꢀꢀ  
dev_display (SelectedRegions)  
(a)原图  
*
[
*
(b)Select_shape选择结果图  
根据特征值创建区域  
使用inner circle算子计算图像区域内接圆  
程序如下:  
*
*
读取图像ꢀꢀꢀꢀꢀꢀꢀread_image (Image, 'fabrik')  
关闭窗口ꢀꢀꢀꢀꢀꢀꢀdev_close_window ()  
dev_open_window (0, 0, 512, 512, 'black', WindowID)  
*
*
*
设置输出颜色为白色ꢀꢀdev_set_color ('white')  
设置图像模式为填充模式dev_set_draw ('fill')  
使用regiongrowing算子寻找颜色相近的邻域  
(a)原图  
regiongrowing (Image, Regions, 1, 1, 3, 500)  
找出每个区域的最大内接圆以及内接圆的中心坐标和半径  
inner_circle (Regions, Row, Column, Radius)  
*
*
*
设置输出颜色为红色ꢀꢀdev_set_color ('red')  
显示每个区域的内接圆ꢀdisp_circle (WindowID, Row, Column, Radius)  
b)区域的内接圆结果图  
根据特征值创建区域  
(2)计算区域外接矩形  
返回平行坐标最小外包矩形Smallest_rectangle1算子。  
smallest_rectangle1(Regions : : : Row1, Column1, Row2, Column2)  
返回最小外包矩形  
smallest_rectangle2 (Regions , Row, Column, Phi, Length1, Length2)  
求图像中的外接矩形实例  
程序如下:  
*
*
*
*
*
*
*
*
*
*
*
关闭窗口ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdev_close_window ()  
读取图像ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀread_image (Shubiao, 'D:/shubiao.png')  
获取图像尺寸ꢀꢀꢀꢀꢀꢀꢀꢀget_image_size (Shubiao, Width, Height)  
打开适应图像大小的窗口ꢀꢀꢀdev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
灰度化ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrgb1_to_gray (Shubiao, GrayImage)  
使用阈值处理提取较暗的部分ꢀthreshold (GrayImage, Regions, 0, 253)  
求平行坐标的最小外接矩形ꢀꢀsmallest_rectangle1 (Regions, Row1, Column1, Row2, Column2)  
填充模式为轮廓ꢀꢀꢀꢀꢀꢀꢀdev_set_draw ('margin')  
根据矩形参数绘制矩形的轮廓ꢀgen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)  
求区域的最小外接矩形ꢀꢀꢀꢀsmallest_rectangle2 (Regions, Row, Column, Phi, Length1, Length2)  
根据矩形参数绘制矩形的轮廓ꢀgen_rectangle2 (Rectangle1, Row, Column, Phi, Length1, Length2)  
根据特征值创建区域  
(a)原图  
(b)阈值处理提取部分  
(c)平行坐标的最小外接矩形  
(d)区域的最小外接矩形  
基于灰度值的特征  
灰度直方图  
在前面章节中,我们已经学习过直方图的概念和计算方法,当时  
直方图更多的是作为一种辅助图像分析的工具。在本节灰度直方图作  
为图像特征识别的一种有力手段。  
区域的灰度特征值  
典型的灰度值的特征  
中心点的行坐标和列  
坐标(row,colum)  
灰度区域面积(area)  
椭圆的长轴(ra) 椭圆的短轴(rb)、  
等效椭圆的角度(phi)  
灰度的均值  
mean)  
灰度值的偏差  
近似平面的偏差  
灰度的最小值(min) 灰度的最大值(max)  
(deviation)  
(plane_deviation)  
gray_features算子实例  
程序如下:  
*
读取图片  
read_image (Image, 'monkey')  
对图像进行阈值处理,主要是将图像转化为区域  
threshold (Image, Region, 1, 255)  
提取区域中最小灰度值  
gray_features (Region, Image, 'min',MinDisp)  
提取区域中最大灰度值  
gray_features (Region, Image, 'max', MaxDisp)  
*
(a)原图  
*
*
b)gray_features算子提取结果图  
运用intensity算子计算区域的灰度值平均值和偏差  
程序如下:  
*
*
*
*
*
*
*
读取图像ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ ꢀread_image (Image, 'mreut')  
关闭窗口ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ dev_close_window ()  
获得图像尺寸 ꢀꢀꢀꢀꢀꢀꢀꢀꢀ ꢀꢀꢀꢀget_image_size (Image, Width, Height)  
打开适应图像大小的窗口ꢀꢀꢀꢀꢀꢀꢀꢀ dev_open_window (0, 0, Width, Height, 'black', WindowID)  
显示图像ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ ꢀ dev_display (Image)  
设置填充模式为轮廓ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ dev_set_draw ('margin')  
创建两个矩形区域ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ gen_rectangle1 (Rectangle1, 350, 100, 450, 200)  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀgen_rectangle1 (Rectangle2, 100, 200, 200, 300)  
*
*
提取区1中灰度值的平均值与偏差ꢀꢀꢀꢀintensity (Rectangle1, Image, Mean1, Deviation1)  
提取区2中灰度值的平均值与偏差ꢀꢀꢀꢀintensity (Rectangle2, Image, Mean2, Deviation2)  
运用intensity算子计算区域的灰度值平均值和偏差  
(a)原图  
(b)矩形区域1  
(c)矩形区域2  
d)灰度值的平均值与偏差结果  
区域的最大、最小灰度值  
min_max_gray算子提取区域中最大灰度以及最小灰度值  
程序如下:  
*
*
*
*
*
*
*
读取图像ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ read_image (Image, 'mreut')  
关闭窗口ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ dev_close_window ()  
获得图像尺寸ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ get_image_size (Image, Width, Height)  
打开适应图像大小的窗口ꢀꢀꢀꢀꢀ dev_open_window (0, 0, Width, Height, 'black', WindowID)  
显示图像ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ dev_display (Image)  
设置填充模式为轮廓ꢀꢀꢀꢀꢀꢀꢀ dev_set_draw ('margin')  
创建两个矩形区域ꢀꢀꢀꢀꢀꢀꢀꢀ gen_rectangle1 (Rectangle1, 350, 100, 450, 200)  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀgen_rectangle1 (Rectangle2, 100, 200, 200, 300)  
*
*
提取区1中最大与最小灰度值ꢀꢀꢀmin_max_gray (Rectangle1, Image, 5, Min1, Max1, Range1)  
提取区2中最大与最小灰度值ꢀꢀꢀmin_max_gray (Rectangle2, Image, 5, Min2, Max2, Range2)  
min_max_gray算子提取区域中最大灰度以及最小灰度值  
(a)原图  
(b)矩形区域1  
(c)矩形区域2  
(d)min_max_gray处理结果  
基于图像纹理的特征  
图像纹理特征  
纹理特征是在包多个像素点的区域进行统计和分析,反映的是物  
体表面的一些特性。它可以用来反映物体表面灰度像素的排列状况。  
图像的纹理特征一般包括图像的能量、相关性、局部均匀性、对比度  
等。该特征也与区域的形状有关,也是一种区域特征,具有旋转不变  
性,但是容易受到光照变化的影响。  
灰度共生矩阵  
灰度共生矩阵是分析纹理特征的一种有效方法,该方法研究了图像纹理中灰度级的空间依  
赖关系。  
具体来说,在图像上取任意两点,坐标分别为 ( x , y ) 、ꢀꢀꢀ, 将ꢀꢀꢀ设为原像素,将ꢀꢀꢀ  
(
m,n)  
(x, y)  
(
m,n) 设为原像素偏移一点分量后的像素,这一对像素点的灰度值为 ( i, j )。灰度共生阵就是表  
现这一对灰度 ( i, j )的取值范围和频率的矩阵,该矩阵的行或者列的维度为原图的灰度等级数。  
下图为灰度共生矩阵原理示意图:  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(a)  
(b)  
灰度共生矩阵  
然而,灰度共生矩阵表达的是一种概率,因此图(b)中的矩阵还需要将统计数目归一化成  
概率,这样得到的才是灰度共生矩阵。  
该矩阵有如下特性:  
1)能量  
2)相关性  
3)局部均匀性  
4)反差  
创建灰度共生矩阵  
(i, j)  
(i, j)  
灰度共生矩阵  
经gen_cooc_matrix得到灰度共生矩阵之后,接下来可以使用cooc_feature_matrix 算子根  
据灰度共生钜阵(Coo_Matrix)计算能量(Energy)、相关性(Correlation)、局部均匀性  
(Homogeneity)和对比度(Contrast)。  
该算子一般与gen_cooc_matrix算子搭配使用,根据gen_cooc_matrix算子生成的输入矩阵  
计算纹理图像的灰度值特征。  
该算子的原型如下:  
cooc_feature_matrix(CoocMatrix : : : Energy, Correlation, Homogeneity, Contrast)  
计算共生矩阵并导出其灰度值特征  
本章小结  
征提取是计算机视觉和图像处理中的一个概念。它指的是使用计  
算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提  
取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、  
连续的曲线或者连续的区域。至今为止特征没有万能和精确的定义。  
习ꢀ题  
6
6
6
.1 什么是图像特征?图像特征可以分为哪几类?  
.2 在Halcon中计算出图像1中字母A的区域面积和中心点坐标。  
.3 在Halcon中运用intensity算子计算出图像1中字母A的灰度值平均值和  
偏差。  
像1